package composantes;

import java.awt.Color;
import java.awt.Dimension;

import interfaces.Grille;

public class PlaqueCellulaire implements Grille{
	private Cellule[][] 		_cellule;
	private int 				_hauteur,
								_largeur;
	private TransfertEnergie 	_transfert;
	
	/*====================PlaqueCellulaire=======================*/
	private void init(int hauteur, int largeur){
		_hauteur = hauteur;
		_largeur = largeur;
		
		_cellule = new Cellule[_hauteur][_largeur];
		for(int i = 0; i < _hauteur; i++){
			for(int j = 0; j < _largeur; j++){
				_cellule[i][j] = new Cellule(i, j);
			}
		}
		_transfert = new TransfertEnergie();
	}
	
	public PlaqueCellulaire(){
		init(10, 10);
	}
	
	public PlaqueCellulaire(int hauteur, int largeur){
		init(hauteur, largeur);
	}
	
	public void setCellule(int x, int y, int etat, int type){
		_cellule[x][y].init(etat, type);
	}
	
	/*================Grille====================*/
	@Override
	public int getLargeur() {
		return _largeur;
	}
	
	@Override
	public int getHauteur() {
		return _hauteur;
	}
	
	@Override
	public Object getElement(int x, int y) {
		return _cellule[x][y];
	}
	
	@Override
	public Color getColor(int x, int y) {
		Color c;
		switch(_cellule[x][y].getType()){
		case 0:
			c = new Color(128, 0, 0);
			break;
		case 1:
			c = new Color(0, 128, 0);
			break;
		default:
			c = new Color(0, 0, 128);
		}
		switch(_cellule[x][y].getEtat()){
		case 0:
			return Color.lightGray;
		case 1:
			return c.brighter();
		case 2:
			return c;
		default:
			return null;
		}
	}
	
	@Override
	public String getText(int x, int y) {
		return Integer.toString(_cellule[x][y].getEtat());
	}
	
	@Override
	public boolean canUpdate() {
		return _transfert.possible();
	}
	
	@Override
	public void update() {
		_transfert.transferer();
	}
	
	@Override
	public void clear() {
		_transfert.clear();
		
	}

	@Override
	public void caseSelectionnee(int x, int y) {
		try{
			if(_transfert.getSrc() == null)
				_transfert.ajouterSrc(_cellule[x][y]);
			else if(_transfert.getDst() == null)
				if(_transfert.getSrc().estVoisin(_cellule[x][y]))
					_transfert.ajouterDst(_cellule[x][y]);
				else{
					clear();
					throw new Exception("Exception de cellule non voisines");
				}
			else{
				clear();
				_transfert.ajouterSrc(_cellule[x][y]);
			}
		}catch(Exception e){
			System.out.println(e.getMessage());
		}
	}

	@Override
	public String getSrc() {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public String getDst() {
		// TODO Auto-generated method stub
		return null;
	}
	
}
